|
Date : 24 aout 1991 Protection : MOT DE PASSE ( manivelle ) Programme : GEISHA Outils : SOFT-ICE V2.50 Fichier : FRED7.COM Temps pass� : 2h d�j� Soci�t� : INFERENCE M.D.O. Divers : D�j� essay� plusieurs fois. Origine : Mr FRERE Num�ro : 136 Ayant r�ussi � craquer les protections sur LEGEND OF DJEL et PARIS DAKAR 90 je me suis mis � chercher la m�me chaine dans GEISHA et COUGAR FORCE. On les trouve quoique un peu diff�rentes et � des endroits differents mais le traitement est le m�me. Dans COUGAR FORCE il suffit de continuer par F10 pour tomber dessus. Pour GEISHA la routine a �t� plac�e dans un sous programme; apr�s avoir choisi la couleur et tap� sur ENTER on poursuit par F10 jusqu'� un RETF, � partir de l� on execute quelques call far avec F10 puis on tombe sur un CALL 4D98 qui lui contient un autre call; le CALL 000A dans lequel se trouve la routine de test en 0FFF:0046. Une chose curieuse c'est que cette routine est dupliqu�e en m�moire trois ou quatre fois. Je pense ajouter � mon HEXUTIL une fonction qui me chercherait quelque chose " qui ressemble � ". Le probl�me c'est qu'au point de vu programmation cel� a l'air d'�tre un vrai casse-t�te car comment programmer des " � peu pr�s " ou bien " du genre de " ? Ces deux programmes ont �t� compact� avec LZ90 de FABRICE BELLARD et devinez quoi ? ...une fois d�compact�s ils ne fonctionnent plus; pire que �a ils plantent tout m�me SOFT-ICE qui se trouve en mode prot�g� ! Je vais �tre oblig� d'�crire � FABRICE BELLARD pour lui demander conseil... Ci dessous la chaine de COUGAR FORCE: CS=0FF7 CS:09FE C45EF8 LES BX,[BP-08] CS:0A01 268A07 MOV AL,ES:[BX] ; MOV BYTE PTR ES:[BX],40 CS:0A04 B400 MOV AH,00 ����������������������� CS:0A06 257000 AND AX,0070 CS:0A09 B104 MOV CL,04 CS:0A0B D3F8 SAR AX,CL CS:0A0D C45EF4 LES BX,[BP-0C] CS:0A10 268A17 MOV DL,ES:[BX] ; MOV BYTE PTR ES:[BX],04 CS:0A13 B600 MOV DH,00 ����������������������� CS:0A15 3BC2 CMP AX,DX CS:0A17 741C JZ 0A35 ; JMP 0A35 CS:0A19 B8FFFF MOV AX,FFFF �������� CS:0A1C 50 PUSH AX * Soulign�: A MODIFIER. La chaine de GEISHA: CS:0FFF CS:0046 C45EFC LES BX,[BP-04] CS:0049 268A07 MOV AL,ES:[BX] CS:004C B400 MOV AH,00 CS:004E 257000 AND AX,0070 CS:0051 B104 MOV CL,04 CS:0053 D3F8 SAR AX,CL CS:0055 C45EF8 LES BX,[BP-08] CS:0058 268A17 MOV DL,ES:[BX] CS:005B B600 MOV DH,00 CS:005D 3BC2 CMP AX,DX CS:005F 741C JZ 0071 CS:005F B8FFFF MOV AX,FFFF En effectuant les modifications suivantes le soft fonctionne; CS:0046 C45EFC LES BX,[BP-04] CS:0049 26C60740 MOV BYTE PTR ES:[BX],40 * CS:004D C45EF8 LES BX,[BP-08] * CS:0050 26C60704 MOV BYTE PTR ES:[BX],04 * CS:0054 EB27 JMP 0071 * : : : ; Les instructions suivantes n'ont plus d'importance. '*' signifie � modifier. Ne pouvant pas d�comprimer ces programmes pour l'instant, la protection reste en place. Il y a bien la solution du " DETOURNEMENT D'INT " mais cette derni�re est relativement compliqu�e dans ce cas l� puisqu'il ne s'agit plus de modifier un ou deux octets mais toute une chaine. Je vais voir ce que je peux faire.... Quelques heures plus tard... je d�cide d'essayer malgr� tout le d�tour- nement de l'IT 21. En lan�ant le soft avec QUAID je vois que la sous- fonction 3D de l'INT 21 est appel�e plus d'une dizaine de fois et ceci "pr�s" de la demande du code. Plus l'INT est proche du code plus j'ai des chances que la routine � modifier soit d�j� en place et moins j'aurais � empiler la pile pour trouver le segment qui comporte la routine � modifier. J'inclus ci-dessous uniquement la partie active de fred7.com en laissant de cot� la partie commune � l'installation du soft en r�sident; ce dernier est le m�me pour tout les fred.com. ; PATCH POUR LE PROGRAMME GEISHA ; FREDDY_SOFT code segment org 100h assume cs:code start: jmp installe ; On va installer la routine r�sidente... cr equ 0dh lf equ 0ah flag equ 3Dh ; Contenu de AH devant �tre test�. adr_ip equ 3DC9h ; En CS:3DC9 il faut avoir 268A instok db cr,lf,' D�tournement de l',39,'INT 21 sous-fonction 3D' db cr,lf db ' ....FREDDY_SOFT....','$' drap db 0,0 elimine db cr,lf,'J',39,'ai en principe tout remis en l',39,'�tat....' db cr,lf,'$' chaine dw 7c6h,0c440h,0f85eh,0c626h,407h,27ebh int21 label dword ; sauvegarde des adresses SEG:OFF de l'INT21 d'origine i40off db 0,0 ; OFFSET i40seg db 0,0 ; SEGMENT tsrint40 proc far jmp short apr�s_id db 'FR' ; On intercalle au d�but du code un identificateur apr�s_id: pushf ; qui permettra de savoir si le programme est l� ! push ds ; Tous les registres utilis�s doivent �tre sauv�s... push es push di push si push dx push cx push bx push ax cmp byte ptr [drap],1 ; Si 1 on devient transparent. jz suite ; Saut � l'INT 21 toutes fonctions valid�es. cmp ah,flag ; AH = 3D. jnz suite ; Si non on traite les INT 21 normalement. mov dx,sp ; On sauve SP dans un registre, ici AX. mov cx,20 ; On essaie une vingtaine de fois... incr: pop ds ; Pour trouver le bon segment CS... dec cx jz s ; Si au bout de vingt fois on a pas r�ussi on sort... cmp word ptr ds:[adr_ip],8A26h jnz incr ; Ci-dessous deux versions possibles: ; ; 1) Une not�e RO qui est efficace pour de longues chaines: mov ax,ds ; RO On place DS en ES puisque STOSW charge en mov es,ax ; RO ES:DI. mov ax,cs ; RO Et CS en DS puisque les donn�es sont LODSW mov ds,ax ; RO de DS:SI. mov si,offset chaine ; RO pointe sur d�but de chaine. mov di,[adr_ip+1] ; RO pointe sur d�but chaine � modifier ( CS ). mov cx,6 ; RO six mots � transf�rer. cld ; RO zero dans le flag direction ( incr�mente ) boucle: lodsw ; RO contenu de SI en AX. stosw ; RO contenu de AX en [DI]. loop boucle ; RO on tourne tant que CX # 0. ; 2) Une autre qui est inactive en ce moment et qui est utilisable pour ; des longueurs inf�rieures � une dizaine de mots. ( et plus simple...) ; mov bx,[adr_ip+1] ; mov word ptr [bx],07c6h ; add bx,2; ; mov word ptr [bx],0c440h ; add bx,2 ; mov word ptr [bx],0f85eh ; add bx,2 ; mov word ptr [bx],0c626h ; add bx,2 ; mov word ptr [bx],0407h ; add bx,2 ; mov word ptr [bx],27ebh mov byte ptr [drap],1h s: mov sp,dx ; On remet SS:SP d'origine. suite: pop ax ; On restaure tous les registres pop bx pop cx pop dx pop si pop di pop es pop ds popf jmp int21 ; Appel de l'INT21 officielle. ( Retour par IRET ) tsrint40 endp eor: |